qiqi.math
math
模块提供加、减、乘、除 等运算方法。
为什么要提供额外的计算方法? js中提供的运算操作符在处理浮点数时会导致精度问题, 比如:
0.55 * 100 // 55.00000000000001
0.3 - 0.1 // 0.19999999999999998
0.1 + 0.2 // 0.30000000000000004
API
decimal(x)
将基本数值包装成Decimal包装类型, 以便使用 Decimal对象下的操作方法
- 参数:
参数 | 说明 | 类型 | 必须 |
---|---|---|---|
x | 数值 | number | 是 |
- 返回值:Decimal
qiqi.math.div(10, 2).value //5
// 等同于:
qiqi.math.decimal(10).div(2).value //5
value
value 不是math的属性,是Decimal对象的属性, 用来获取值类型
- 返回值:number
qiqi.math.decimal(10).value // 10
add(x, y)
加法
- 参数:
参数 | 说明 | 类型 | 必须 |
---|---|---|---|
x | 加数 | number | |
y | 加数 | number | 可选 |
- 返回值:Decimal
qiqi.math.add(0.1, 0.2).value //0.3
// 等同于:
qiqi.math.decimal(0.1).add(0.2).value
sub(x, y)
减法
- 参数:
参数 | 说明 | 类型 | 必须 |
---|---|---|---|
x | 被减数 | number | |
y | 加数 | number | 可选 |
只传一个参数时, x是减数 传两个参数时, x 是被减数
- 返回值:Decimal
qiqi.math.sub(0.3, 0.2).value //0.1
// 等同于:
qiqi.math.decimal(0.3).sub(0.2).value //0.1
mul(x, y)
减法
- 参数:
参数 | 说明 | 类型 | 必须 |
---|---|---|---|
x | 乘数 | number | |
y | 乘数 | number | 可选 |
- 返回值:Decimal
qiqi.math.mul(3, 2).value //6
// 等同于:
qiqi.math.decimal(3).mul(2).value //6
div(x, y)
除法
- 参数:
参数 | 说明 | 类型 | 必须 |
---|---|---|---|
x | 被除数 | number | |
y | 除数 | number | 可选 |
只传一个参数时, x是除数 传两个参数时, x 是被除数
- 返回值:Decimal
qiqi.math.div(10, 2).value //5
// 等同于:
qiqi.math.decimal(10).div(2).value //5
abs(x)
绝对值
- 参数:
参数 | 说明 | 类型 | 必须 |
---|---|---|---|
x | 取绝对值 | number | 可选 |
- 返回值:Decimal
qiqi.math.abs(-1).value //1
// 等同于:
qiqi.math.decimal(-1).abs().value //5
random(dp)
生成随机数
- 参数:
参数 | 说明 | 类型 | 必须 |
---|---|---|---|
dp | 小数位数 | number | 可选 |
- 返回值:Decimal
qiqi.math.random(10).value // '0.4117936847'
round(x)
返回与给出的数值表达式最接近的整数 (四舍五入)
- 参数:
参数 | 说明 | 类型 | 必须 |
---|---|---|---|
x | 取整的数 | number | 可选 |
qiqi.math.round(4.4).value // 4
qiqi.math.round(4.7).value // 5
// 等同于
qiqi.math.decimal(4.7).round().value
- 返回值:Decimal
floor(x)
返回小于等于其数值参数的最大整数。
qiqi.math.floor(4.7).value // 4
// 等同于
qiqi.math.decimal(4.7).floor().value
- 参数:
参数 | 说明 | 类型 | 必须 |
---|---|---|---|
x | 取整的数 | number | 可选 |
- 返回值:Decimal
ceil(x)
返回大于等于其数字参数的最小整数。
qiqi.math.ceil(4.1).value // 5
qiqi.math.ceil(4.7).value // 5
// 等同于
qiqi.math.ceil(4.7).floor().value
- 参数:
参数 | 说明 | 类型 | 必须 |
---|---|---|---|
x | 取整的数 | number | 可选 |
- 返回值:Decimal
toDp(x)
toDecimalPlaces
设置小数位精度
qiqi.math.decimal(12.34567).toDp(2).value // 12.34
const y = qiqi.math.decimal(9876.56371);
y.toDP(3).value // 9876.564
y.toDP(1, 0).value // '9876.6'
y.toDP(1, 1).value //9876.5
y.toDP(1, 1).value //9876.6
- 参数:
参数 | 说明 | 类型 | 必须 |
---|---|---|---|
x | 小数位数 | number | 必填 |
dp | 最后一位向上向下取关系 | number | 0:向上取整 1:向下取整 4: 四舍五入(默认) |
- 返回值:Decimal
caution
- 所有的运算函数,返回的是一个 Decimal 的包装对象, 这样可以做到链式调用,比如:
qiqi.math.add(5, 3).sub(2).mul(2)
计算结果返回的是一个对象,给 form表单的表单项赋值的时候需要调用value
属性转化成数值
qiqi.math.add(1,2).value
运算函数的入参是数值, 传入Decimal对象是错误的:
const math = qiqi.math;
math.add(1, 2).div(math.sub(2,1)) // ☠️ 错误写法, div方法入参必须是数值
math.add(1, 2).div(math.sub(2,1).value) // 👍 正确写法
- 结构时只能解构到math, 不能再往下解构:
const math = qiqi.math;
math.add(1, 2); // 👍 正确写法
const add = math.add; // ☠️ 使用错误
add(1, 2) // ❌ 会包this指针错误